package ballena.activities;

import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.StreamCorruptedException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import ballena.entidades.Usuario;
import ballena.utiles.Global;
import ballena.utiles.Servlet;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class Amigos extends Activity {

	List<Usuario> amigos = new ArrayList<Usuario>();
	private ListView lvListaAmigos;
	Integer telefono;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.amigos);

		int idUsuario = Global.usuario.getId();
		amigos.clear(); // por si las moscas inicializo la lista
		amigos.addAll(pedirListaAmigos(idUsuario));

		crearVista();
	}

	List<Usuario> pedirListaAmigos(int idUsuario) {
		List<Usuario> listaAmigos = new ArrayList<Usuario>();
		listaAmigos.clear(); // por si las moscas la limpio
		// aqui pido al servlet mi lista de amigos del usuario idUsuarios
		String param[] = { "accion=" + Global.AMIGOS, "id=" + idUsuario };
		Servlet s = new Servlet(Global.SERVLET, param);
		s.conectar();

		ObjectInputStream in;

		try {
			InputStream ain = s.getInputStream();
			in = new ObjectInputStream(ain);
			// no me hace falta comprobar la lista, o es vac�a o tiene
			// contenido

			int tamano = (Integer) in.readInt();
			Bitmap img;
			Object[] datos = new Object[7];
			byte[] imagenbyte = null;
			for (int cont = 0; cont < tamano; cont++) {
				datos[0] = in.readInt();
				datos[1] = in.readInt();
				datos[2] = in.readUTF();
				datos[3] = in.readUTF();
				datos[4] = in.readUTF();
				datos[5] = in.readUTF();
				datos[6] = (Date) in.readObject();
				imagenbyte = (byte[]) in.readObject();
				telefono = (Integer) in.readObject();
				listaAmigos.add(new Usuario(datos));

				img = BitmapFactory.decodeByteArray(imagenbyte, 0,
						imagenbyte.length);

				listaAmigos.get(listaAmigos.size() - 1).setImagen(img);
				listaAmigos.get(listaAmigos.size() - 1).setTelefono(telefono);

			}

		} catch (StreamCorruptedException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			s.desconectar();
		}

		return listaAmigos;
	}

	public void asociarVariables() {
		lvListaAmigos = (ListView) findViewById(R.id.lvListaAmigos);
	}

	public void crearVista() {
		asociarVariables();
		refreshListItems();
	}

	static class ViewHolder {
		TextView nombre;
		TextView apellidos;
		Button escribir;
		ImageView imagen;
	}

	private void refreshListItems() {
		AdaptadorAmigos adaptador = new AdaptadorAmigos(this);
		lvListaAmigos.setAdapter(adaptador);
	}

	@SuppressWarnings("rawtypes")
	class AdaptadorAmigos extends ArrayAdapter {

		Activity context;

		@SuppressWarnings("unchecked")
		AdaptadorAmigos(Activity context) {
			super(context, R.layout.item_amigos, amigos);
			this.context = context;
		}

		public View getView(final int position, View convertView,
				ViewGroup parent) {
			View item = convertView;
			ViewHolder holder;

			if (item == null) {
				LayoutInflater inflater = context.getLayoutInflater();
				item = inflater.inflate(R.layout.item_amigos, null);
				/*
				 * Creo el contenedor y lo asocio a sus respectivos elementos de
				 * la vista
				 */
				holder = new ViewHolder();
				holder.nombre = (TextView) item
						.findViewById(R.id.tvItemAmigosNombre);
				holder.apellidos = (TextView) item
						.findViewById(R.id.tvItemAmigosApellidos);
				holder.escribir = (Button) item
						.findViewById(R.id.btItemAmigosEscribir);
				holder.imagen = (ImageView) item
						.findViewById(R.id.ivItemAmigosImagen);

				item.setTag(holder);
			} else {
				holder = (ViewHolder) item.getTag();
			}

			holder.nombre.setText(amigos.get(position).getNombre());
			holder.apellidos.setText(amigos.get(position).getApellidos());
			holder.imagen.setImageBitmap(amigos.get(position).getImagen());
			item.setOnClickListener(new View.OnClickListener() {
				public void onClick(View view) {
					irAPerfil(amigos.get(position));
				}
			});

			holder.escribir.setOnClickListener(new View.OnClickListener() {
				public void onClick(View view) {
					escribir(amigos.get(position));
				}
			});
			return (item);
		}
	}

	//Aqui se hace el intent para ir al perfil.
	void irAPerfil(Usuario amigo) {

		finish();

		Intent intent = new Intent(Amigos.this, Perfil.class);
		Bundle bundle = new Bundle();
		bundle.putInt("ID", amigo.getId());
		bundle.putString("NOMBRE", amigo.getNombre());
		intent.putExtras(bundle);

		startActivity(intent);

	}

	void escribir(Usuario amigo) {
		Intent intent = new Intent(Amigos.this, Escribir.class);

		Bundle bundle = new Bundle();
		bundle.putInt("idAmigo", amigo.getId());
		bundle.putString("nombreAmigo", amigo.getNombre());
		if (amigo.getTelefono() != null) {
			bundle.putBoolean("HAYTELEFONO", true);
			bundle.putInt("telefono", amigo.getTelefono());
		} else {
			bundle.putBoolean("HAYTELEFONO", false);
		}
		intent.putExtras(bundle);

		startActivity(intent);

	}
}
